package cn.edu.tju.elm.service;

import java.util.List;

import cn.edu.tju.elm.dto.RefundDto;
import cn.edu.tju.elm.model.Order;
import cn.edu.tju.elm.model.Refund;

/**
 * 退款服务接口
 * 处理与订单退款相关的业务逻辑
 */
public interface RefundService {
    
    /**
     * 申请退款
     * @param orderId 订单ID
     * @param reason 退款原因
     * @param detail 退款详细说明
     * @return 更新后的订单
     */
    Order applyRefund(Long orderId, String reason, String detail);
    
    /**
     * 商家确认退款
     * @param refundId 退款申请ID
     * @param approved 是否批准退款
     * @param rejectReason 拒绝原因(如果不批准)
     * @return 更新后的订单
     */
    Order processRefund(Long refundId, boolean approved, String rejectReason);
    
    /**
     * 检查订单是否可以申请退款
     * @param orderId 订单ID
     * @return 是否可以申请退款
     */
    boolean canApplyRefund(Long orderId);
    
    /**
     * 获取订单的退款申请
     * @param orderId 订单ID
     * @return 退款申请DTO
     */
    RefundDto getRefundByOrderId(Long orderId);
    
    /**
     * 获取商家的所有退款申请
     * @param businessId 商家ID
     * @return 退款申请DTO列表
     */
    List<RefundDto> getRefundsByBusinessId(Long businessId);
    
    /**
     * 获取待处理的退款申请
     * @return 退款申请DTO列表
     */
    List<RefundDto> getPendingRefunds();
    
    /**
     * 将Refund实体转换为DTO
     * @param refund 实体
     * @return DTO
     */
    RefundDto convertToDto(Refund refund);
} 